fn main() {


    // 标量类型 : 整数类型 浮点类型  布尔类型  字符类型

    // ------------------整数类型:----------------------------
    // 无符号:  u8 u16 u32 u64 u128 usize
    // 有符号:  i8 i16 i32 i64 i128 isize

    // 范围:
    // 无符号  0~(2的次方-1)
    // 有符号  -(2的次方)~(2的次方-1)

    // isize 和 usize  由 计算机架构决定  32位系统就是 32 位， 64 位系统就是64位


    //  整数的字面值
    // 10进制  ：
    // 16进制  0x开头
    // 8进制   0o开头
    // 2进制   0b开头
    // Byte   b''


    //除了byte类型，所有的字面值都可以使用类型后缀


    let a1 = 50u8;

    let a2 = 0xFFu16;

    let a3 = 0o77;

    let a4 = 0b111;

    let a5 = b'Q';


    //   整数溢出
    // 在调试模式下会panic , u8的范围是0~255 ， 设置256 就会panic
    // 在发布模式下， rust会执行环绕操作， 256 变成0 ， 257 变成1

    //
    // let u1:u8 = 256;
    // println!("u1:{}", u1);


    // ----------------浮点类型--------------------

    //   f32 单精度
    //   f64 双精度 （默认的浮点类型）


    let f1 = 2.2;
    let f2: f32 = 2.2;


    //------------布尔类型---------------

    let t = true;
    let f = false;


    // -------------字符类型(char)---------------------


    let c1 = 'A';

    println!("c1:{}", c1);


    //--------------------元组（Tuple）-----------------------------------
    // 元组的长度不能修改,   但是里面的值可以修改， 类型不能改
    // 元组中的元素类型可以不同,


    let mut tup = (33, 2.3, "qq", 'a', true);
    println!("tup is {:?}", tup);

    //元组的值是可以修改的
    tup.1 = 3.3;
    println!("tup is {:?}", tup);


    // 获取  元组的值
    let (a1, a2, a3, a4, a5) = tup;
    println!("a1 :{} ,  a2 :{} , a3 :{} , a4 :{} , a5 :{}  ", a1, a2, a3, a4, a5);


    //获取单个元素   元组.index
    let m = tup.0;


    println!("m is {}", m);


    //-------------------数组--------------------------
    //长度固定， 类型单一（和元组不同）
    //数组的定义
    let array = [1, 2, 3];


    // 带类型的数组 [类型; 长度]
    let nums: [i32; 5] = [1, 2, 3, 4, 5];


    //如果数组中元素都相同， 可以简化成下面的写法
    // [初始值; 长度]
    let nums = [3; 5]; //   等价与 [3,3,3,3,3]


    // 访问数组  数组[index]

    println!("-----------num[1]: {}",nums[1]);



}
